package com.xhu.base;

import java.util.Random;

/**
 * 保序加密算法实现类
 * @author 王涛
 * @Created by WT on 2019/3/15.
 */
public class OPE {
    private double a = 0.0;
    private double b = 0.0;
    private double sens = 0.0;

    /**  构造函数
     * @param a  秘密实数变量
     * @param b  秘密实数变量
     * @param sens  明文数据之间的最小差
     */
    public OPE(double a, double b, double sens) {
        this.a = a;
        this.b = b;
        this.sens = sens;
    }

    /**
     * 明文的非线性函数
     * @param value 明文
     * @return
     */
    private double function(double value) {
        return Math.abs(value);
    }

    /**
     * 随机噪音的生成
     * @param value 明文
     * @return
     */
    private double noise(double value) {
        Random random = new Random();
        return random.nextDouble() * (a * function(value + sens) * (value + sens) - a * function(value) * value);
    }

    /**
     * @param value  明文值
     * @param isPutNoise  噪音标识符
     * @return  密文值
     */
    public double nindex(double value, boolean isPutNoise) {
        if (isPutNoise == true) {
            return a * function(value) * value + b + noise(value);
        } else {
            return a * function(value) * value + b;
        }
    }
}
